package arithmetic.sort;/**
 * Description
 * <p>
 * </p>
 * DATE 2020/3/24.
 *
 * @author cuihao.
 */

/**
 * @program: ch-general
 * @description:
 * @author: cuihao
 * @create: 2020-03-24 01:03
 **/
public class Sort {
    public static void main(String[] args) {
        int[] arr = {1, 4, 12, 2, 5, 10, 8, 6, 9};

//        insertionSort(arr);
//        selectionSort(arr);
        bubbleSort(arr);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    // 插入排序
    // 将待插入的数插入已经排好序的数组里！从外循环里一个一个的取，每个与内循环里有序的比较，插入合适的位置
    public static void insertionSort(int[] arr) {
        for (int i = 1; i < arr.length ; i++) {
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
    }

    // 选择 先找第一小 再找第二小
    public static void selectionSort(int[] arr) {

        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

    // 冒泡 先找最大的， 再找第二大的
    public static void bubbleSort(int[] arr) {
        for (int i = arr.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}
